#!/usr/bin/env python
# -*- coding: utf-8 -*-
from multiprocessing import Process, Pipe
import time


def consumer(pipe, name):
    left, right = pipe
    left.close()
    while True:
        try:
            num = right.recv()
            print('%s receive:%s' % (name, num))
        except EOFError:
            right.close()
            break

# 管道左侧的生产者
def producer(pipe):
    left, right = pipe
    for i in range(10):
        left.send(i)
        time.sleep(1)
    else:
        print ("end")
        left.close()


if __name__ == '__main__':
    # 声明一个管道，复制给两个变量 left, right
    left, right = Pipe()

    # 消费者启动，相当于管道右侧随时接受数据
    task = Process(target=consumer, args=((left, right), 'task'))
    task.start()
    
    # 生产者启动，相当于管道左侧发送数据
    producer((left, right))

    right.close()
    left.close()

    # p.join([timeout]):主线程等待p终止
    # 强调：是主线程处于等的状态，而p是处于运行的状态）。timeout是可选的超时时间
    # 需要强调的是，p.join只能join住start开启的进程，而不能join住run开启的进程
    task.join()
    print('进程间通信-管道-主进程')